/**
 * 
 */
package mm.back.service.impl;

import java.util.List;

import mm.back.dao.VendedorDAO;
import mm.back.entity.Vendedor;
import mm.back.filtros.VendedoresFiltro;
import mm.back.service.MMAbstractService;
import mm.back.service.VendedorService;
import mm.exceptions.MMGenericException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author PUSDERKIS
 *
 */
@Service("vendedorService")
@Transactional
public class VendedorServiceImpl extends MMAbstractService implements
		VendedorService{
	
	@Autowired
	private VendedorDAO vendedorDAO;

	/** 
	 * @see mm.back.dao.VendedorDAO#getVendedor(java.lang.Long)
	 */
	public Vendedor getVendedor(Long idVendedor) throws MMGenericException {
		
		Vendedor vend = null;
		
		if (idVendedor != null){
			vend = vendedorDAO.getVendedor(idVendedor);
		} else {
			throw new MMGenericException("El id de vendedor no es valido:"+idVendedor);
		}
		
		if (vend == null){
			throw new MMGenericException("No se encontró el vendedor número: "+idVendedor);
		}
		
		return vend;
	}

	/**
	 * @param vendedorDAO the vendedorDAO to set
	 */
	public void setVendedorDAO(VendedorDAO vendedorDAO) {
		this.vendedorDAO = vendedorDAO;
	}

	public List<Vendedor> searchVendedores(VendedoresFiltro filtro)
			throws MMGenericException {
		VendedoresFiltro filter = filtro;
		if (filtro == null){
			if (logger.isDebugEnabled()){
				logger.debug("Se esta intentando efectuar una busqueda con un filtro null, se procede a crear la instancia del objeto.");
			}
			filter = new VendedoresFiltro();
		}
			
		if (logger.isDebugEnabled()){
			logger.debug("Buscando los vendedores para el filtro: {nombre:"+filtro.getNombre()+"},{numero:"+filtro.getNumero()+"},{activo:"+filtro.getActivo()+"}");
		}
		return vendedorDAO.searchVendedores(filter);
	}

	/**
	 * @see mm.back.service.VendedorService#saveVendedor(mm.back.entity.Vendedor)
	 */
	public void saveVendedor(Vendedor vendedor) throws MMGenericException {
		if (vendedor == null){
			logger.error("Se intento guardar un vendedor nulo.");
			throw new NullPointerException("Vendedor nulo.");
		}
		
		vendedorDAO.saveVendedor(vendedor);
	}

	/**
	 * @see mm.back.service.VendedorService#createVendedor(mm.back.entity.Vendedor)
	 */
	public void createVendedor(Vendedor vendedor) throws MMGenericException {
		
		if (vendedor == null){
			logger.error("Se intento guardar un vendedor nulo.");
			throw new NullPointerException("Vendedor nulo.");
		}
		
		if (vendedor.getId() != null && 0 < vendedor.getId()){
			logger.error("Se intento crear un vendedor que ya esta creado en la base de datos.");
			throw new MMGenericException("Se intento crear un vendedor existente.");
		}
		
		vendedor.setActivo(true);
		vendedorDAO.createVendedor(vendedor);
		
	}

}
